跳到主要内容

MongoDB 常用命令

MongoDB 的控制台是一个 JavaScript Shell

控制台常用命令

进入终端后也有些常用的命令

show dbs -- 显示所有数据的列表
db -- 显示当前数据库对象或集合
use local -- 连接到一个指定的数据库

数据库元数据

数据库的信息是存储在集合中。它们使用了系统的命名空间:

dbname.system.*

在 MongoDB 数据库中命名空间 dbname.system.* 是包含多种系统信息的特殊集合(Collection),如下:

集合命名空间描述
dbname.system.namespaces列出所有名字空间。
dbname.system.indexes列出所有索引。
dbname.system.profile包含数据库概要(profile)信息。
dbname.system.users列出所有可访问数据库的用户。
dbname.local.sources包含复制对端(slave)的服务器信息和状态。

控制台常用命令

进入终端后也有些常用的命令

show dbs -- 显示所有数据的列表
db -- 显示当前数据库对象或集合
use local -- 连接到一个指定的数据库

终端的查询命令也是很随心所欲,基本上是

db.集合名.fund()

这种形式去查询的

创建、删除数据库

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

// 如下:创建了一个 tempDB 并查询当前数据库
use tempDB;
db

// 查看全部数据库
show dbs

// 删除数据库
db.dropDatabase()

// 删除集合
db.collection.drop()

创建集合

创建语法:

// 在前面创建了数据库的前提下再创建集合
db.createCollection(name, options)
// name: 要创建的集合名称
// options: 可选参数, 指定有关内存大小及索引的选项

options 可以是如下可选参数:

  • capped 布尔:如果为 true,则创建固定集合。
  • size 数值:为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
  • max 数值:指定固定集合中包含文档的最大数量。

注意这里的固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。

实例:

> use test
switched to db test
> db.createCollection("temp_coll")
{ "ok" : 1 }

查看当前全部集合

> show collections
my_collection
test

创建带参的集合

> db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
6142800, max : 10000 } )

一般无需显示的创建集合,直接插入数据就会自动生成这个集合

> db.mycol2.insert({"name" : "测试集合"})
> show collections
mycol2
...

删除集合

// 语法
db.collection.drop()
// 实例
db.mycol2.drop()

如果只是想快速清空当前的这个 col 集合

db.col.remove({})

注意:

remove 用于将集合中的文档删除,但不删除集合本身,也不删除集合的索引。 drop 不仅删除集合的文档,也会删除集合本身,同时也会删除在集合上创建的索引。

查询文档

// 语法(不写查询条件默认是输出全部)
db.collection.find(query, projection)
// 只返回一个文档
db.collection.findOne(query, projection)

// 输出格式化后的结果 ⭐
db.col.find().pretty()
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

MongoDB AND 条件

db.col.find({key1:value1, key2:value2}).pretty()

MongoDB OR 条件

db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()

AND 和 OR 联合使用

db.col.find({"likes": {$gt:50}, $or: [{"by": "学习资料"},{"title": "MongoDB 教程"}]}).pretty()
// 对应于:'where likes>50 AND (by = '学习资料' OR title = 'MongoDB 教程')'

条件操作符

$gt -------- greater than  >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =

实例:获取 "col" 集合中 "likes" 大于100,小于 200 的数据,可以使用以下命令:

db.col.find({likes : {$lt :200, $gt : 100}})
// 类似于SQL语句:
// Select * from col where likes>100 AND likes<200;

模糊查询

查询 title 包含"教"字的文档:

db.col.find({title://})

查询 title 字段以"教"字开头的文档:

db.col.find({title:/^教/})

查询 titl e字段以"教"字结尾的文档:

db.col.find({title:/教$/})

插入文档

文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式(BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称)

MongoDB 使用 insert() 方法向集合中插入文档,语法如下:

// 语法
db.COLLECTION_NAME.insert(document)

insert(): 若插入的数据主键已经存在,则会抛异常,提示主键重复,不保存当前数据。

db.col.insert(
{
title: '学习 MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})

// 查看已插入文档
db.col.find()

// 会自动生成 _id
[
{
"_id": {"$oid": "5fd5e292d0c6063c2fa534a0"},
"description": "MongoDB 是一个 Nosql 数据库",
"likes": 100,
"tags": ["mongodb", "database", "NoSQL"],
"title": "学习 MongoDB"
}
]

除了上面那种直接插入的方法,还有具体细分的方法 insertOne 插入单条数据、insertMany 插入多条文档数据

// 语法
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

实例:

// 插入单条数据
db.col.insertOne({"a": 3})
// [
// {
// "_id": {"$oid": "5fd5e4f0d0c6063c2fa534a2"},
// "a": 3
// }
// ]

// 插入多条数据
db.col.insertMany([{"b": 3}, {'c': 4}])
// [
// {
// "_id": {"$oid": "5fd5e51bd0c6063c2fa534a3"},
// "b": 3
// },
// {
// "_id": {"$oid": "5fd5e51bd0c6063c2fa534a4"},
// "c": 4
// }
// ]

修改文档

// 语法
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update 的查询条件,类似sql update 查询内 where 后面的。
  • update : update 的对象和一些更新的操作符(如 $$inc...)等,也可以理解为sql update 查询内 set 后面的
  • upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。
  • multi : 可选,mongodb 默认是 false 只更新找到的第一条记录,如果这个参数为 true 就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
> db.col.update({'title':'学习 MongoDB'}, {$set: {'title': '这是修改后的标题'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

以上语句只会修改第一条发现的文档,如果要修改多条相同的文档,则需要设置 multi 参数为 true

db.col.update({'title':'学习 MongoDB'}, {$set: {'title': '这是修改后的标题'}},{multi:true})

更多实例:

// 只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

// 全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

// 只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

// 全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

// 全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

// 只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

删除文档

MongoDB remove() 函数是用来移除集合中的数据。

remove() 方法的基本语法格式如下所示:

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

例如快速清空当前的这个 col 集合

db.col.remove({})
提示

在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。

Limit 与 Skip 方法

>db.COLLECTION_NAME.find().limit(NUMBER)
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

使用 skip() 方法来跳过指定数量的数据,skip 方法同样接受一个数字参数作为跳过的记录条数。